#include <stdio.h>
#include <stdlib.h>

struct ListNode {
    int data;
    struct ListNode *next;
};

struct ListNode *createlist(); /*裁判实现，细节不表*/
struct ListNode *reverse( struct ListNode *head );
void printlist( struct ListNode *head )
{
     struct ListNode *p = head;
     while (p) {
           printf("%d ", p->data);
           p = p->next;
     }
     printf("\n");
}

int main()
{
    struct ListNode  *head;

    head = createlist();
    head = reverse(head);
    printlist(head);
    
    return 0;
}

/* 你的代码将被嵌在这里 */
struct ListNode *reverse(struct ListNode *head) {
    struct ListNode *previous = NULL; // 前一个节点，初始为 NULL
    struct ListNode *current = head;   // 当前节点，初始为头节点
    struct ListNode *nextNode = NULL;  // 下一个节点，初始为 NULL

    // 遍历链表
    while (current != NULL) {
        nextNode = current->next; // 保存当前节点的下一个节点
        current->next = previous;  // 反转当前节点的指针
        previous = current;        // 移动前一个节点到当前节点
        current = nextNode;       // 移动到下一个节点
    }

    // 返回新的头节点（原链表的尾节点）
    return previous;
}